﻿using System;
using System.Collections.Generic;
using Wisdom.Core;

namespace Wisdom.Core
{
    /// <summary>
    /// Defines a interface which is used to hold the list of the task that would be executed when bootstrapping the application.
    /// </summary>
    public interface IBootstrapperTasksRegistry : IFluentSyntax, ITasksRegistry
    {
        /// <summary>
        /// Includes the specified task.
        /// </summary>
        /// <typeparam name="TTask">The type of the task.</typeparam>
        /// <returns></returns>
        IBootstrapperTasksRegistry Include<TTask>() where TTask : IBootstrapperTask; 

        /// <summary>
        /// Includes the specified task and also allows to configure.
        /// </summary>
        /// <typeparam name="TTask">The type of the task.</typeparam>
        /// <param name="configure">The configure.</param>
        /// <returns></returns>
        IBootstrapperTasksRegistry Include<TTask>(Action<TTask> configure) where TTask : IBootstrapperTask;

        /// <summary>
        /// Excludes the specified task which might have  implicitly added.
        /// </summary>
        /// <typeparam name="TTask">The type of the task.</typeparam>
        /// <returns></returns>
        IBootstrapperTasksRegistry Exclude<TTask>() where TTask : IBootstrapperTask;
    }
}